package com.example.foo.ftt.dao;

import java.util.List;

import org.apache.commons.lang3.StringUtils;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.example.core.PageResult;
import com.example.core.Pageable;
import com.example.foo.ftt.model.FttUser;
import com.example.foo.ftt.query.FttUserQuery;

@org.apache.ibatis.annotations.Mapper
public interface FttUserDao extends com.example.core.dao.BaseDao<FttUser, Long> {

	public default PageResult<FttUser> findFttUsers(FttUserQuery fttUserQuery, Pageable pageable) {
		QueryWrapper<FttUser> queryWrapper = createQueryWithBaseIf(fttUserQuery);
		//
		if (fttUserQuery.getState() != null) {
			queryWrapper.eq("state", fttUserQuery.getState());
		}
		if (StringUtils.isNotEmpty(fttUserQuery.getRoleLevel())) {
			queryWrapper.eq("role_level", fttUserQuery.getRoleLevel());
		}
		if (fttUserQuery.getFttLevel() != null) {
			queryWrapper.eq("ftt_level", fttUserQuery.getFttLevel());
		}
		if (StringUtils.isNotEmpty(fttUserQuery.getCellphone())) {
			queryWrapper.like("cellphone", fttUserQuery.getCellphone());
		}
		if (StringUtils.isNotEmpty(fttUserQuery.getReferralCode())) {
			queryWrapper.eq("referral_code", fttUserQuery.getReferralCode());
		}
		if (fttUserQuery.getReferralParentUserId() != null) {
			queryWrapper.eq("referral_parent_user_id", fttUserQuery.getReferralParentUserId());
		}
		if (StringUtils.isNotEmpty(fttUserQuery.getReferralParentUserIdPath())) {
			queryWrapper.likeRight("referral_parent_user_id_path", fttUserQuery.getReferralParentUserIdPath());
		}
		if (fttUserQuery.getParentUserId() != null) {
			queryWrapper.eq("parent_user_id", fttUserQuery.getParentUserId());
		}
		if (StringUtils.isNotEmpty(fttUserQuery.getParentUserIdPath())) {
			queryWrapper.likeRight("parent_user_id_path", fttUserQuery.getParentUserIdPath());
		}
		if (fttUserQuery.getUserId() != null) {
			queryWrapper.eq("user_id", fttUserQuery.getUserId());
		}
		if (StringUtils.isNotEmpty(fttUserQuery.getIdname())) {
			queryWrapper.like("idname", fttUserQuery.getIdname());
		}
		if (fttUserQuery.getCardzState() != null) {
			queryWrapper.eq("cardz_state", fttUserQuery.getCardzState());
		}
		if (StringUtils.isNotEmpty(fttUserQuery.getCardzCellphone())) {
			queryWrapper.like("cardz_cellphone", fttUserQuery.getCardzCellphone());
		}
		return findPages(queryWrapper, pageable);
	}

	@Select("SELECT DISTINCT ftt_level FROM fttuser WHERE parent_user_id_path LIKE CONCAT(#{parentUserIdPath},'%')")
	public List<String> findFttUserFttLevelsByParentUserIdPathLikeRight(@Param("parentUserIdPath") String parentUserIdPath);

}
